// Package database 提供数据库连接和操作功能
// 该包使用gorm库来简化数据库操作
package database

import (
	"aigen-todo/internal/models"

	"go.uber.org/zap"
	"gorm.io/driver/postgres"
	"gorm.io/gorm"
	gormlogger "gorm.io/gorm/logger"
)

// Connect 建立到PostgreSQL数据库的连接
// 参数:
//
//	dsn - 数据库连接字符串
//	logger - zap日志记录器
//
// 返回值:
//
//	*gorm.DB - gorm数据库实例
//	error - 连接错误信息
func Connect(dsn string, logger *zap.Logger) (*gorm.DB, error) {
	// 尝试连接PostgreSQL数据库
	db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
		Logger: gormlogger.Default.LogMode(gormlogger.Info),
	})
	if err != nil {
		logger.Error("Failed to connect to PostgreSQL", zap.Error(err))
		logger.Info("For testing purposes, the server will start with limited functionality. Please ensure PostgreSQL is running and connection details are correct.")
		return nil, err
	}

	// 自动迁移数据库表结构（暂时注释，避免迁移错误）
	// logger.Info("Running database migrations...")
	// if err := migrate(db); err != nil {
	// 	logger.Error("Failed to migrate database", zap.Error(err))
	// 	return nil, err
	// }
	// logger.Info("Database migrations completed successfully")

	return db, nil
}

// migrate 自动迁移数据库表结构
// 参数:
//
//	db - gorm数据库实例
//
// 返回值:
//
//	error - 迁移错误信息
func migrate(db *gorm.DB) error {
	// 自动迁移所有模型
	return db.AutoMigrate(
		&models.User{},
		&models.TaskGroup{},
		&models.Task{},
		&models.TaskLog{},
	)
}
